<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one or more
  ~ contributor license agreements.  See the NOTICE file distributed with
  ~ this work for additional information regarding copyright ownership.
  ~ The ASF licenses this file to You under the Apache License, Version 2.0
  ~ (the "License"); you may not use this file except in compliance with
  ~ the License.  You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<html>
<head>
    <title>Proposal for Proxy Package</title>
</head>

<body bgcolor="white">

<div align="center">
    <h1>Proposal for <em>Proxy</em> Package</h1>
</div>

<h3>(0) Rationale</h3>

<p>
    Many projects require the use of proxies in order to support such features as method interception/decoration, lazy
    loading, dependency injection, etc. There are many different techniques for creating proxy objects which delegate to
    other objects (JDK proxies, CGLIB, and Javassist to name a few). Using these technologies can prove to be quite
    daunting. This package seeks to abstract away the difficult code required to implement proxies effectively and
    efficiently so that developers can concentrate on implementing the core implementations and method interceptors.
</p>

<h3>(1) Scope of the Package</h3>

<p>
    The package shall create and maintain a suite of utility classes for creating dynamic proxy objects written in the
    Java language to be distributed under the ASF license.  The package will include many different "core object
    provider" implementations supporting many existing remoting technologies (EJB, Hessian, Burlap, JAX-RPC, Apache
    XML-RPC, RMI, etc.) as well as many other "in-vm" implementations (bean instantiation, cloning, constant, etc.).
    The package will also provide "decorator object providers" which add functionality to the object providers they wrap
    such as pooling, singleton, caching, etc.  The package will also serve as a repository for many useful interceptor
    implementations which support such features as logging, asynchronous invocation, etc.  The package will provide
    multiple "proxy factory" implementations, supporting different proxying technologies (JDK proxies, CGLIB, Javassist,
    etc.).
</p>

<h3>(1.5) Interaction With Other Packages</h3>

<p>
    <em>Proxy</em> utilizes the JUnit unit testing framework for developing and executing unit tests, but this is of
    interest only to developers of the component. The original will include support for the Hessian and Burlap remoting
    protocols.  The original codebase will also include support for CGLIB and Javassist-base proxies.
</p>

<p>No external configuration files are utilized.</p>

<h3>(2) Initial Source of the Package</h3>

<p>
    The initial codebase will be contributed by James Carman based on code in the Syringe (http://syringe.dev.java.net)
    project and can be distributed under the Apache license.
</p>

<p>The proposed package name for the new component is
    <code>org.apache.commons.proxy</code>.</p>


<h3>(3) Required Jakarta-Commons Resources</h3>

<ul>
    <li>SVN Repository - New directory <code>proxy</code> in the
        <code>jakarta-commons</code> SVN repository. All initial committers
        are already committers on <code>jakarta-commons</code>, so no
        additional user setups are required.</li>
    <li>Mailing List - Discussions will take place on the general
        <em>jakarta-commons@jakarta.apache.org</em> mailing list. To help
        list subscribers identify messages of interest, it is suggested that
        the message subject of messages about this component be prefixed with
        [proxy].</li>
    <li>Bugzilla - New component "Proxy" under the "Commons" product
        category, with appropriate version identifiers as needed.</li>
    <li>Jyve FAQ - New category "commons-proxy" (when available). </li>
</ul>


<h3>(4) Initial Committers</h3>
<ul>
    <li>James Carman</li>
</ul>
</body>
</html>